package Text3;
import java.util.Scanner;
public class Main {
    /*一共有 n个数，编号是 1∼n，最开始每个数各自在一个集合中。现在要进行 m
    个操作，操作共有两种：M a b，将编号为 a和 b
    的两个数所在的集合合并，如果两个数已经在同一个集合中，则忽略这个操作；
    Q a b，询问编号为 a和 b的两个数是否在同一个集合中；*/
    /*输入格式
    第一行输入整数 n和 m。
    接下来 m行，每行包含一个操作指令，指令为 M a b 或 Q a b 中的一种。*/

    //并查集的核心操作，寻找根节点祖先 + 路径压缩
   public static int find(int[]p,int x){
       if(p[x]!=x){
           p[x]=find(p,p[x]);
       }
       return p[x];
   }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[] p = new int[n+1];
        for (int i = 1; i <= n; i++) {
            p[i]=i;
        }
        while(m-->0){
            String s = scanner.next();
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            //合并集合
            if(s.equals("M")){
                p[find(p,a)]=find(p,b);//将a集合的根节点即祖先指向b集合的祖先
            }else{ //是否同个集合
                if(find(p,a)==find(p,b)){
                    System.out.println("Yes");//如果两个集合的祖先相同说明两个集合在同个集合中。
                }else{
                    System.out.println("No"); //否则相反
                }
            }
        }
    }
}
